// 数据迁移脚本：将 Eat 模型中的 data 字段复制到 date 字段
const mongoose = require('mongoose');

// 数据库连接
async function connect() {
  try {
    await mongoose.connect('mongodb://localhost:27017/kxy', {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    console.log('数据库连接成功');
  } catch (err) {
    console.error('数据库连接失败:', err);
    process.exit(1);
  }
}

// 加载模型
function loadModels() {
  require('../models/Eat');
  require('../models/Date');
}

async function migrate() {
  const Eat = mongoose.model('Eat');
  const DateModel = mongoose.model('Date');
  
  console.log('开始迁移数据...');
  
  // 查找所有 Eat 记录
  const eatRecords = await Eat.find({});
  console.log(`找到 ${eatRecords.length} 条饮食记录`);
  
  let updatedCount = 0;
  let dateCreatedCount = 0;
  
  for (const record of eatRecords) {
    let needUpdate = false;
    
    // 如果没有 date 字段但有 data 字段，复制过去
    if (!record.date && record.data) {
      record.date = record.data;
      needUpdate = true;
      console.log(`记录 ${record._id}: 将 data (${record.data}) 复制到 date`);
    }
    
    // 如果没有 date 字段也没有 data 字段，使用今天的日期
    if (!record.date && !record.data) {
      const today = new Date().toISOString().split('T')[0];
      record.date = today;
      record.data = today;
      needUpdate = true;
      console.log(`记录 ${record._id}: 设置为今天的日期 (${today})`);
    }
    
    if (needUpdate) {
      try {
        await record.save();
        updatedCount++;
      } catch (err) {
        console.error(`更新记录 ${record._id} 失败:`, err.message);
      }
    }
    
    // 在 Date 表中创建日期记录
    if (record.date && record.openid) {
      try {
        await DateModel.findOneAndUpdate(
          { openid: record.openid, date: record.date },
          { openid: record.openid, date: record.date },
          { upsert: true, new: true }
        );
        dateCreatedCount++;
      } catch (err) {
        // 忽略重复键错误
        if (!err.message.includes('duplicate key')) {
          console.error(`创建 Date 记录失败 (openid: ${record.openid}, date: ${record.date}):`, err.message);
        }
      }
    }
  }
  
  console.log(`\n迁移完成！`);
  console.log(`- 更新了 ${updatedCount} 条 Eat 记录`);
  console.log(`- 创建了 ${dateCreatedCount} 条 Date 记录`);
}

async function main() {
  try {
    await connect();
    loadModels();
    await migrate();
    console.log('\n数据迁移成功完成！');
    process.exit(0);
  } catch (err) {
    console.error('迁移过程中出错:', err);
    process.exit(1);
  }
}

// 运行迁移
main();

